package com.gitee.ywj1352.算法.week01;

import java.util.Arrays;

public class MoveZore {

    /**
     * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序
     * 自己想的执行不行
     * @param nums
     */
    public static void moveZeroes(int[] nums) {
        if (nums.length < 2)
            return;
        int i= 0,j = 0;
        while (i < nums.length -1){
            if (nums[i] == 0 && j<nums.length ){
                if (nums[j] != 0){
                    int temp = nums[j];
                    nums[i] = temp;
                    nums[j] = 0;
                    i++;
                    j = i+1;
                }else {
                    j++;
                }
            }else {
                i++;
                j = i+1;
            }
        }
    }


   //往前走 非0 就交换 0就继续往前走
    // fei0Idx = Idx0 为 这区间0 的长度
    public static void moveZeroes2(int[] nums) {
        int size = nums.length, Idx0= 0, fei0Idx =0;
        //
        while (fei0Idx < size){
            if (nums[fei0Idx] != 0) {
                //找到非0 就交换
                swap(nums, Idx0, fei0Idx);
                Idx0++;
            }
            fei0Idx++;
        }
    }

    public static void  swap(int[] nums, int left, int right) {
        int temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
    }


    public static void main(String[] args) {
        int[] arr = {1,2,0,3,12};
        moveZeroes2(arr);
        System.out.println(Arrays.toString(arr));
    }
}
